package com.path.planning.util.path.entity;

import org.locationtech.jts.geom.LineString;
import org.locationtech.jts.geom.MultiLineString;

/**
 * 路径网络拓扑数据抽象类
 */
public abstract class PathTopologyData {
    /**
     * 多线对象
     */
    private MultiLineString mulLineGeometry;
    /**
     * reverse后的多线
     */
    private MultiLineString reverseMulLineGeometry;
    /**
     * 道路时间: cost/speed
     */
    private Double roadTime;
    /**
     * 合并后的单线
     */
    private LineString lineGeometry;
    /**
     * reverse后的合并后的单线
     */
    private LineString reverseLineGeometry;

    // 路径规划时需要使用的共有属性, 抽象定义get方法,便于各继承类内部对共有属性重命名

    /**
     * 路径id
     */
    public abstract Integer getId();

    /**
     * 路径gis信息
     */
    public abstract String getGeom();

    /**
     * 路径起点id
     */
    public abstract Integer getSource();

    /**
     * 路径终点id
     */
    public abstract Integer getTarget();

    /**
     * 路径长度
     */
    public abstract Double getLength();

    /**
     * 正向行驶开销
     */
    public abstract Double getCost();

    /**
     * 逆向行驶开销
     */
    public abstract Double getReverseCost();

    /**
     * 时速
     */
    public abstract Double getSpeed();

    /**
     * 限高
     */
    public abstract Double getHeightLimit();

    /**
     * 限宽
     */
    public abstract Double getWidthLimit();

    /**
     * 限重
     */
    public abstract Double getWeightLimit();

    /**
     * 水路限深
     */
    public abstract Double getDepthLimit();

    /**
     * 权重
     */
    public abstract Double getPenalty();

    /**
     * 路径名称
     */
    public abstract String getPathName();

    public MultiLineString getMulLineGeometry() {
        return mulLineGeometry;
    }

    public void setMulLineGeometry(MultiLineString mulLineGeometry) {
        this.mulLineGeometry = mulLineGeometry;
    }

    public MultiLineString getReverseMulLineGeometry() {
        return reverseMulLineGeometry;
    }

    public void setReverseMulLineGeometry(MultiLineString reverseMulLineGeometry) {
        this.reverseMulLineGeometry = reverseMulLineGeometry;
    }

    public Double getRoadTime() {
        return roadTime;
    }

    public void setRoadTime(Double roadTime) {
        this.roadTime = roadTime;
    }

    public LineString getLineGeometry() {
        return lineGeometry;
    }

    public void setLineGeometry(LineString lineGeometry) {
        this.lineGeometry = lineGeometry;
    }

    public LineString getReverseLineGeometry() {
        return reverseLineGeometry;
    }

    public void setReverseLineGeometry(LineString reverseLineGeometry) {
        this.reverseLineGeometry = reverseLineGeometry;
    }
}
